//
// Created by 啊汤哥 on 2025/6/28.
//

#include <cstdio>
#include <stdlib.h>

struct TreeNode {
    int value;
    TreeNode *left;
    TreeNode *right;
};

// 初始话链表
TreeNode *InitTree() {
    return nullptr; // 函数返回一个空指针不指向任何有效  对象的指针
}

// 插入节点
TreeNode *CreateNewTree(int value) {
    struct TreeNode *newNode = (struct TreeNode *) malloc(sizeof(struct TreeNode));
    newNode->value = value;
    newNode->left = nullptr;
    newNode->right = nullptr;
    return newNode;
}

// 插入节点
TreeNode *InsertTree(TreeNode *root, int value) {
    if (root == nullptr) {
        return CreateNewTree(value);
    }
    if (value < root->value) {
        root->left = InsertTree(root->left, value);
    }else if (value > root->value) {
        root->right = InsertTree(root->right, value);
    }
    return root;

}


void VisitRoot(TreeNode *root) {
    printf("%d",root->value);
}

// 先序遍历
void PreOrderTree(TreeNode* root) {
    if (root == NULL) {
        return;
    }
    VisitRoot(root);
    PreOrderTree(root->left);
    PreOrderTree(root->right);

}

// 中序遍历
void InOrderTree(TreeNode* root) {
    if (root == nullptr) {
        return;
    }

    InOrderTree(root->left);
    VisitRoot(root);
    PreOrderTree(root->right);

}

// 后序遍历
void PostOrderTree(TreeNode* root) {
    if (root == nullptr) {
        return;
    }

    PostOrderTree(root->left);
    PostOrderTree(root->right);
    VisitRoot(root);

}

// 计算二叉树的深度
int calculateDepth(TreeNode* root) {
    if (root == nullptr) {
        return false;
    }
    int leftDepth = calculateDepth(root->left);
    int rightDepth = calculateDepth(root->right);

    if (leftDepth > rightDepth) {
        return leftDepth+1;
    }
    return rightDepth+1;
}
